package org.leetcode.middle.leetcode59;

import java.util.List;

public class Solution
{

    public int[][] generateMatrix2(int n) {

        int[][] res = new int[n][n];
        //每次循环的起始的x和y
        int startX = 0;
        int startY = 0;
        //偏移量
        int offset = 1;
        //循环次数
        int loopTimes = 1;

        int count =1;
        int i=0;
        int j=0;

        //使用n/2作为判断依据的原因：每循环一次n会少2，所以根据n可以被2除以多少次，来得到循环次数
        while (loopTimes<=n/2){

            //从左到右,左闭右开[,)
            for ( j = startY; j < n-offset; j++) {
                res[startX][j]=count++;
            }

            for ( i = startX; i < n-offset; i++) {
                res[i][j]=count++;
            }

            for ( ;j>startY ; j--) {
                res[i][j]=count++;
            }

            for (;i>startX;i--){
                res[i][j]=count++;
            }

            startX++;
            startY++;

            loopTimes++;
            offset++;

        }

        if (n%2==1){
            res[startX][startY]=count;
        }

        return res;
    }
    public int[][] generateMatrix(int n) {

        //循环次数 ，每次加1，同时作为偏移量
        int loop=0;

        int [][]res = new int[n][n];

        //作用是每次循环的出发点，第一次是（0，0），第二次是（1,1）.....
        int start = 0;
        //作用是用来填充数字
        int count = 1;

        //可以看做是x和y坐标
        int i ,j;

        while (loop++<n/2)
        {
            //上侧 从左到右
            for (j=start;j<n-loop;j++)
            {
                res[start][j]=count++;
            }

            //右侧 从上到下
            for (i=start;i<n-loop;i++)
            {
                res[i][j]=count++;
            }

            //下侧 从右到左
            for (;j>loop;j--)
            {
                res[i][j]=count++;
            }

            //左侧 从下到上
            for (;i>loop;i--)
            {
                res[i][j]=count++;
            }

            start++;

        }

        //当n为奇数时，中间最后的数字需要单独添加
        if (n%2==1)
        {
            res[start][start]=count;
        }

        return res;
    }

    public static void main(String[] args) {



    }

}
